home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 2.iso
/
STUTTGART
/
COMM
/
TERMINAL
/
SERIALTEST
/
!SerialTrm
/
UnCRUNCHED
(
.txt
)
< prev
Wrap
RISC OS BBC BASIC V Source
|
1995-01-21
|
12KB
|
469 lines
>!RunImage
block% 1024
nagg(
$+" at line "+
"OS_Byte",2,2 :
enable RS423 reciever!
taskname$="Serial Term"
dirname$="<serialterm$dir>"
iconname$="god_0"
menuname$="Serial Term"
taskwinnum%=0
<initialslot%=
OS_ReadVarVal("serialterm$initialslot"))
<startupcomm$=
OS_ReadVarVal("serialterm$startupcommand")
@outbufsize%=
OS_ReadVarVal("serialterm$outputbuffersize"))
outbufsize%<=260
outbufsize%=2048
4dataformat%=
OS_ReadVarVal("serialterm$data"))
"OS_SerialOp",1,dataformat%
8outcpp%=
OS_ReadVarVal("serialterm$charsperpoll"))
child_task_handle%=-1
=_running%=1:_error%=2:_paused%=3:_creating%=4:_overrun%=5
_getting%=
:_putting%=
#status%=_creating%:iconstate%=0
taskid% 8:$taskid%="TASK"
"Wimp_Initialise",200,!taskid%,taskname$
version%,taskhandle%
nagg(
$+" at line "+
ibm% 256,indic% 24,wblk% 512
outbuf% outbufsize%
=outb_thresh%=outbufsize%-260:
threshold for auto-pausing
outcpp%<0
outcpp%=outb_thresh%
"Hourglass_On"
assemble:
sprites:
templates:
initmenus:iconid%=
"Hourglass_Off"
schizo
"OS_ReadMonotonicTime"
now%
t_thresh%=now%+100
status%<>_paused%
"Wimp_Poll",0,block%
reason%
"Wimp_PollIdle",0,block%,t_thresh%
reason%
reason%
0 :
status%
07
_running% :
inputtest:
buffer_output
1/
_creating% :
createtaskwindow
2,
_overrun% :
buffer_output
4,
"OS_ReadMonotonicTime"
now%
5:
now%>t_thresh%
iconthang:t_thresh%=now%+50
2 :
"Wimp_OpenWindow",,block%
3 :
"Wimp_CloseWindow",,block%
9 :
menuclick(block%)
6 :
iconclicked(block%!12,block%!16)
17,18:
nagg(nagg$)
"Wimp_ReportError"," "+nagg$,1<<4,taskname$
block%!0=-2
block%!4=0 :
minx
block%!8=0 :
miny
block%!12=48 :
maxx
block%!16=76 :
maxy
block%!20=&200A
1<<8
block%!24=indic%
J+block%!32=
iconname$:$indic%=iconname$
block%!28=sprites%
"Wimp_CreateIcon",,block%
icon%
=icon%
setibaricn(to$)
$indic%=to$
!wblk%=-2
wblk%!4=iconid%
wblk%!8=0
wblk%!12=0
"Wimp_SetIconState",,wblk%
nagg("Error in death throes!"):
"Wimp_CloseDown",taskhandle%,!taskid%
click_type
c%=block%!8
c%=2
popupmenu(
block%!16
&808C1:
message_Output
&808C2:
message_Ego
&808C3:
message_Morio
&80667:
nagg("You can't run two Serial Terms at once!"):
&80666:
replyeek
initmenus
p" i%=
initmenu(ibm%,menuname$)
q' i%=
additem(i%,"Info",0,inf_win%)
r$ i%=
additem(i%,"Restart",0,-1)
s" i%=
additem(i%,"Pause",0,-1)
t" i%=
additem(i%,"Quit",-1,-1)
popupmenu(bar%)
"Wimp_GetPointerInfo",,block%
y2q=!block%:w=block%!4:w%=block%!12:i%=block%!16
w=96+44*4
menu%=ibm%
"Wimp_CreateMenu",,menu%,q-64,w
}&lastmenu%=menu%:menx%=q-64:meny%=w
templates
infb% 512,infi% 128
"Wimp_OpenTemplate",,dirname$+".templates"
:inf_win%=
template("info",infb%,infi%,200,-1,sprites%)
"Wimp_CloseTemplate"
template(name$,buf%,ind%,len%,fonts%,sprs%)
"Wimp_LoadTemplate",,buf%,ind%,ind%+len%,fonts%,name$,0
buf%!64=sprs%
"Wimp_CreateWindow",,buf%
handle%
=handle%
sprites
#file%=
(dirname$+".SpriteFile")
file%=0
nagg("Can't find spritefile!"):
#file%)+128
#file%
sprites% S%
sprites%!0=S%
sprites%!8=16
"OS_SpriteOp",9+256,sprites%
"OS_SpriteOp",10+256,sprites%,dirname$+".SPRITEFILE"
menuselection(blk%,menu%)
"Wimp_DecodeMenu",,menu%,blk%,wblk%+64
=$(wblk%+64)
menuclick(brtnd%)
, item$=
menuselection(brtnd%,lastmenu%)
item$
"Quit" :
"Pause" :
pause
"Restart" :
restart
OS_ReadVarVal(A$)
"OS_ReadVarVal",A$,block%,256,0,3
,,L :A$=""
a= 0
A$=A$+
(block%!a)
iconclicked(window%,icon%)
window%<0
icon%=iconid%
click_type:
child_task_handle%<>-1
killtaskwindow
initmenu(menu%,menuname$)
2$menu%=menuname$: :
menu title
Emenu%?12=7:menu%?13=2 :
title foreground & background
Emenu%?14=7:menu%?15=0 :
menu foreground & background
(menuname$)>5
" menu%!16=(
(menuname$)+1)*16
menu%!16=6*16
2menu%!20=44 :
width & height of items
@menu%!24=0 :
vertical gap twixt items
=menu%+28
additem(menu%,text$,last%,sub%)
last%
!menu%=128
!menu%=0
menu%!4=sub%
menu%!8=&7000021
$(menu%+12)=text$
=menu%+24
tick(menu%,text$,grey%)
menu%+=4
menu%+=24
# flags%=menu%!8:last%=!menu%
mt$=$(menu%+12)
mt$=text$
last%=128
mt$<>text$
nagg("Error - can't (un)tick '"+text$+"' in menu cuz it doesn't exist!"):
grey%
!menu%=last%
1<<0
!menu%=last%
(1<<0)
createtaskwindow
child_task_handle%<>-1 status%=_creating%:
taskwinnum%+=1
/ cli$="*TASKWINDOW "+
34+startupcomm$+
9 cli$+=" -wimpslot "+
(initialslot%)+"K -name "+
# cli$+=" (Serial Task)"+
0 cli$+=" -ctrl -task &"+
hex8(taskhandle%)
! cli$+=" -txt &"+
hex8(666)
"Wimp_StartTask",cli$
. status%=_running%:
tick(ibm%,"Pause",0)
hex8(n%)
"00000000"+
~n%,8)
message_Ego
newhandle%=block%!4
# child_task_handle%=newhandle%
message_Morio
child_task_handle%=-1
status%=_running%
status%=_error%
killtaskwindow
child_task_handle%=-1
O !block%=20:block%!4=0:block%!8=0:block%!12=0:block%!16=&808C4:
die scum!
"Wimp_SendMessage",17,block%,child_task_handle%
schizo
L !block%=20:block%!4=0:block%!8=0:block%!12=0:block%!16=&80666:
Aaargh
"Wimp_SendMessage",17,block%,0
replyeek
from%=block%!4
from%<>taskhandle%
E !block%=20:block%!4=0:block%!8=0:block%!12=0:block%!16=&80667
,
"Wimp_SendMessage",17,block%,from%
pausewindow
child_task_handle%=-1
8 status%=_paused%:
iconthang:
tick(ibm%,"Pause",-1)
2 !block%=20:block%!4=0:block%!8=0:block%!12=0
I block%!16=&808C6:
Freeze Motherfucka, or I'll blow your balls off!
"Wimp_SendMessage",17,block%,child_task_handle%
resumewindow
child_task_handle%=-1
8 status%=_running%:
iconthang:
tick(ibm%,"Pause",0)
2 !block%=20:block%!4=0:block%!8=0:block%!12=0
< block%!16=&808C7:
Nice'n'slow, hands on the fender...
"Wimp_SendMessage",17,block%,child_task_handle%
pausewindowA
child_task_handle%=-1
2 !block%=20:block%!4=0:block%!8=0:block%!12=0
I block%!16=&808C6:
Freeze Motherfucka, or I'll blow your balls off!
"Wimp_SendMessage",17,block%,child_task_handle%
resumewindowA
child_task_handle%=-1
2 !block%=20:block%!4=0:block%!8=0:block%!12=0
< block%!16=&808C7:
Nice'n'slow, hands on the fender...
"Wimp_SendMessage",17,block%,child_task_handle%
restart
child_task_handle%<>-1
killtaskwindow
createtaskwindow
iconthang
inputtest
(inputtest)
block%!16=&808C0:
input
"Wimp_SendMessage",17,block%,child_task_handle%
_getting%=
message_Output
_putting%=
messageoutput
iconthang
status%
5
_running%:stem$="run_"
_error%:stem$="err_"
_paused%:stem$="paw_"
8.
_creating%:stem$="god_":iconstate%=1
9<
_overrun%:
iconstate% stem$="err_"
stem$="run_"
iconstate%=1-iconstate%
_putting%
stem$="put_":iconstate%=1
_getting%
stem$="get_":iconstate%=1
_getting%
_putting%
stem$="pet_":iconstate%=1
setibaricn(stem$+
(iconstate%))
_putting%=
_getting%=
pause
status%=_paused%
resumewindow
tick(ibm%,"Pause",
pausewindow
tick(ibm%,"Pause",
free:=
(Qfree)
used:=
(Qused)
buffer_output
error%=
(crunchynuts)
free<=outb_thresh%)
status%=_overrun%:
pausewindowA
status%=_overrun%
used<16
status%=_running%:
resumewindowA
assemble
code% 512
pass%=0
P%=code%
[OPTpass%
.outbstart EQUD 0
.outbend EQUD 0
.outbsize EQUD outbufsize%
.outbaddr EQUD outbuf%
.outcpp EQUD outcpp%
.crunchynuts
c!MOV R12,#0 \ cout%=0
d'LDR R11,outbend \ get outb_end%
e)LDR R10,outbstart \ get outb_start%
f)LDR R9,outbsize \ get outbufsize%
g%LDR R8,outbaddr \ get outbuf%
h%LDR R7,outcpp \ get outcpp%
i=MOV R0,#3 \ use serial_op 3 (for later, dimwit)
.whileconditions
k1CMP R10,R11 \ if outb_start%=outbend%
BEQ endwhile
m)CMP R7,R12 \
outcpp%=cout%
nGBEQ endwhile \ we've finished (error will be tested later)
o/.whilebody \ so I know where I am!
p3LDRB R1,[R8,R10] \ char%=outb_start%?outbuf%
q+SWI "OS_SerialOp"\ see, told you so.
rJBCS endwhile \ if an error (ie. buffer full) then goto endwhile
s(ADD R10,R10,#1 \ outb_start%+=1
t9CMP R10,R9 \ if out_bstart%=outbufsize% then
Q R10,#0 \ outb_start%=0
v"ADD R12,R12,#1 \ cout%+=1
B whileconditions
.endwhile
MVNCS R0,#0
MOVCC R0,#0
STR R10,outbstart
STR R11,outbend
MOV PC,R14
.blockaddr EQUD block%+20
.messageoutput
)LDR R11,outbend \ get outb_end%
+LDR R9,outbsize \ get outbufsize%
'LDR R8,outbaddr \ get outbuf%
'LDR R12,blockaddr \ fudge ahoy!
/LDR R7,[R12],#4 \ R7=count, R12->data
.moloop
7LDRB R0,[R12],#1 \ get char, increment pointer
2STRB R0,[R8,R11] \ outbuf%?outb_end%=char
*ADD R11,R11,#1 \ outb_start%+=1
5CMP R11,R9 \
outb_end%=outbifsize%
Q R11,#0 \ outb_end%=0;
$SUBS R7,R7,#1 \ size%-=1
-BNE moloop \ loop till size%=0
STR R11,outbend
MOV PC,R14
.ptrval EQUD block%+20
.blockaddrit EQUD block%
.inputtest
LDR R11,ptrval
)ADD R11,R11,#4 \ -> [block%?24]
#MOV R10,#24 \ counter
MOV R9,#252-24 \ eek
MOV R0,#4
.itloop
SWI "OS_SerialOp"
BCS enditloop
4STRB R1,[R11],#1 \ block%?ptr%=char%; ptr%+=1
%ADD R10,R10,#1 \ counter%+=1
%SUBS R9,R9,#1 \ booga booga
BNE itloop \ Yeeha!
.enditloop
MOV R6,R10
S R8,R10,#3 \ get counter
5BEQ alignedok \ if 0 then no need to fudge!
+RSB R7,R8,#4 \ R7=4-(counter
:ADD R10,R10,R7 \ add 'alignment fudge' to counter
.alignedok
LDR R1,blockaddrit
2STR R10,[R1,#0] \ !block%=
align(size%+24)
4SUB R6,R6,#24 \ get actual number of chars
)STR R6,[R1,#20] \ block%!20=size%
MOV R2,#0
STR R2,[R1,#4]
STR R2,[R1,#8]
STR R2,[R1,#12]
MOV R0,R6
MOVS PC,R14
.Qfree
LDR R11,outbstart
LDR R10,outbend
LDR R9,outbsize
CMP R11,R10
SUBGT R0,R11,R10
SUBLE R1,R10,R11
SUBLE R0,R9,R1
MOVS PC,R14
.Qused
LDR R11,outbstart
LDR R10,outbend
LDR R9,outbsize
CMP R11,R10
SUBGT R1,R9,R11
ADDGT R0,R1,R10
SUBLE R0,R10,R11
MOVS PC,R14